package main

/*
* Content: Go 实现协程池控制高并发
* --------------------------------------------------
* goroutine work pool, 可以防止goroutine暴涨或者泄露: https://juejin.cn/post/6943952470993272845
 */

import (
	"fmt"
	"time"
)

// 不使用 work pool 的写法
func worker(j int, results2 chan<- int) {

	fmt.Printf("不使用 work pool, start job:%d\n", j)
	time.Sleep(time.Second)
	fmt.Printf("不使用 work pool, end job:%d\n", j)
	results2 <- j * 2

}

// 用于和 go-1102-groutinePool 的对比实验
func MyNotUserPool() {

	// Go 实现协程池控制高并发
	fmt.Println("--------------------Go 实现协程池 控制高并发--------------------")

	results2 := make(chan int, 100) // 用于保存不使用 work pool 的结果

	// 100个任务 (不使用 work pool 的写法)
	for j := 1; j <= 100; j++ {
		go worker(j, results2)
	}

	time.Sleep(time.Second * 10) // 设置延迟, 让任务执行一会

	// 输出结果
	for a := 1; a <= 5; a++ {
		<-results2
	}
}
